package com.wei.czz.framework.store.service;

import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.store.StoreFormVo;
import com.wei.czz.common.vo.store.StoreVo;
import com.wei.czz.framework.store.entity.StoreEntity;

import java.util.List;


/**
 * 商店表
 *
 * @author wei
 * email 945158190@gmail.com
 * date 2023-11-22 17:44:15
 */
public interface StoreService {

    /**
     * 保存商店操作
     * @param storeVo 参数对象
     * @return 商店主键
     */
    Long saveStore(StoreVo storeVo);

    /**
     * 提交商店操作
     * @param storeVo 参数对象
     * @return 商店主键
     */
    Long submitStore(StoreVo storeVo);

    /**
     * 修改提交商店操作
     * @param storeVo 参数对象
     * @return 商店主键
     */
    Long modifyStore(StoreVo storeVo);

    /**
     * 快速提交商店操作
     * @param store 商店对象
     */
    Long fastSubmitStore(StoreEntity store);

    /**
     * 分页查询商店操作
     * @param storeFormVo 参数对象
     * @return 分页对象
     */
    PageDto<StoreEntity> getStorePageList(StoreFormVo storeFormVo);

    /**
     * 获取用户商店数量
     * @param status 商店状态
     * @return 数量
     */
    Integer getUserStoreCount(Integer status);

    /**
     * 获取商店操作
     * @param id 主键
     * @return 商店对象
     */
    StoreEntity getStore(Long id);

    /**
     * 获取商店提交/修改统计数据操作
     * @param submitBusinessIdList 提交业务主键列表
     * @param modifyBusinessIdList 修改业务主键列表
     * @return 商店列表
     */
    List<StoreEntity> getStoreOptionStatList(List<Long> submitBusinessIdList, List<Long> modifyBusinessIdList);

    /**
     * 获取商店最新审核通过列表操作
     * @param businessIdList 业务主键列表
     * @return 商店列表
     */
    List<StoreEntity> getStoreMaxFinishList(List<Long> businessIdList);

    /**
     * 获取商店列表操作
     * @param idList       商店主键列表
     * @param deleteStatus 删除状态
     * @return 商店列表
     */
    List<StoreEntity> getStoreList(List<Long> idList, Integer deleteStatus);

    /**
     * 获取商店提交/修改记录操作
     * 商店状态（提交）：返回提交记录列表
     * 商店状态（修改）：返回修改记录列表
     * @param businessId 业务主键
     * @param status     商店状态
     * @return 商店提交/修改记录列表
     */
    List<StoreEntity> getHistorySubmitList(Long businessId, Integer status);

    /**
     * 获取商店状态对应的最新商店主键操作
     * @param businessId 业务主键
     * @param status     商店状态
     * @return 商店主键
     */
    Long getLastId(Long businessId, Integer status);

    /**
     * 获取最新一条审核通过的商店操作
     * @param businessId 业务主键
     * @return 商店对象
     */
    StoreEntity getLastFinishStore(Long businessId);

    /**
     * 获取商店所有历史审核通过版本操作
     * @param businessId 业务主键
     * @return 商店对象列表
     */
    List<StoreEntity> getFinishStoreList(Long businessId);

    /**
     * 修改商店操作
     * @param store 商店对象
     */
    int updateStore(StoreEntity store);

    /**
     * 批量删除商店操作
     * @param idList 主键列表
     */
    void batchDeleteStore(List<Long> idList);

}

